package com.xtq.countclass.service.impl;

import com.xtq.countclass.dao.GroupeDao;
import com.xtq.countclass.dao.RecordDao;
import com.xtq.countclass.entity.Groupe;
import com.xtq.countclass.entity.Record;
import com.xtq.countclass.service.GroupeService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 小组表(Groupe)表服务实现类
 *
 * @author makejava
 * @since 2024-03-06 00:07:56
 */
@Service("groupeService")
public class GroupeServiceImpl implements GroupeService {
	@Resource
	private GroupeDao groupeDao;
	@Resource
	private RecordDao recordDao;
	
	/**
	 * 通过ID查询单条数据
	 *
	 * @param id 主键
	 * @return 实例对象
	 */
	@Override
	public Groupe queryById(String id) {
		return this.groupeDao.queryById(id);
	}
	
	/**
	 * 分页查询
	 *
	 * @return 查询结果
	 */
	@Override
	public List<Groupe> queryAll() {
		return this.groupeDao.queryAll();
	}
	
	/**
	 * 新增数据
	 *
	 * @param groupe 实例对象
	 * @return 实例对象
	 */
	@Override
	public Groupe insert(Groupe groupe) {
		this.groupeDao.insert(groupe);
		recordDao.insert(new Record(groupe.getGroup(), "admin", 0, LocalDateTime.now()  .toString(), Integer.parseInt(groupe.getScore()),"增加小组组长id是"+groupe.getGroupid()));
		
		return groupe;
	}
	
	/**
	 * 修改数据
	 *
	 * @param groupe 实例对象
	 * @return 实例对象
	 */
	@Override
	public int update(Groupe groupe) {
		String preScore = groupeDao.queryById(groupe.getId())
		                           .getScore();
		int update = this.groupeDao.update(groupe);
		
		String nowScore = groupeDao.queryById(groupe.getId())
		                           .getScore();
		
		recordDao.insert(new Record(groupe.getGroup(), "admin", Integer.parseInt(groupe.getScore()) - Integer.parseInt(preScore), LocalDateTime.now()
		                                                                                                                                       .toString(), Integer.parseInt(nowScore),"分数变动"));
		
		return update;
		
	}
	
	/**
	 * 通过主键删除数据
	 *
	 * @param id 主键
	 * @return 是否成功
	 */
	@Override
	public boolean deleteById(String id) {
		return this.groupeDao.deleteById(id) > 0;
	}
	
	@Override
	public List<Groupe> queryNameLike(String key) {
		return groupeDao.groupNameLike(key);
	}
	
	/**
	 * 计算平时分
	 * @param maxScore 平时分满分是多少一般50
	 * @param lowerScore 平时分最低多少(排名最后给20分)
	 * 将每个人的分数乘以(max-lower)/maxScoreBig得到平时分
	 * 平时分是lower+其他
	 */
	@Override
	public void cal(Integer maxScore,Integer lowerScore) {
		// 拿到最高分映射成50分减最低分  --满分
		// maxScoreClass 是上课得分的最大值
		Integer maxScoreClass = groupeDao.getMaxScore();
		// 将每个人的分数乘以(maxScore-lowerScore)/maxScoreClass得到平时分
		// maxScoreClass -- max-lower;
		// score -- dailyscore
		// 算出来的结果再加lower是最终分数存入数据库
		groupeDao.updateScore(lowerScore, (maxScore*1.0-lowerScore*1.0)/maxScoreClass);
		
		// 最低分相当于只有最低分
	}
	
	@Override
	public Boolean modifyGroupName(Groupe groupe) {
		String groupeName = groupeDao.queryById(groupe.getId()).getGroup();
		recordDao.insert(new Record(groupeName, "admin", 0, LocalDateTime.now().toString(), 0,"小组"+groupeName+"+改名为:"+groupe.getGroup()));
		return groupeDao.modifyGroupName(groupe);
		
	}
	
	@Override
	public Boolean modifyLeaderId(String groupeid, String id) {
		recordDao.insert(new Record(id, "admin", 0, LocalDateTime.now().toString(), 0,"小组"+id+"+修改组长为 :"+groupeid));
		return groupeDao.modifyLeaderId(id,groupeid);
		
	}
}
